package widget_data

import (
	"encoding/xml"
	"fmt"
	"os"
)

// XmlLoader xml 读代理类
type XmlLoader struct {
	root   Root
	Parser IParser
}

func NewXmlLoader(parser IParser) IWidgetLoader {
	return &XmlLoader{
		Parser: parser,
	}
}
func (w *XmlLoader) GetXmlRoot() *Root {
	return &w.root
}
func (w *XmlLoader) Load(data []byte) {
	err := xml.Unmarshal(data, &w.root)
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		os.Exit(1)
	}
	w.Parser.UpdateProperties(w.root.Properties)
	w.Parser.UpdateLoadSkin(&w.root.LoadSkin)
	for _, item := range w.root.ChildrenWidget {
		w.traverseWidgets(item)
	}
}

func (w *XmlLoader) traverseWidgets(item *WidgetData) {
	fmt.Printf("Widget SkinName: %s, SkinTempName: %s\n", item.Name, item.SkinTempName)
	w.Parser.StartElement(nil, item.XMLName.Local, item)
	for _, prop := range item.Properties {
		fmt.Printf("  Property Key: %s, Value: %s\n", prop.Key, prop.Value)
	}
	if len(item.ChildrenWidget) > 0 {
		for _, v := range item.ChildrenWidget {
			w.traverseWidgets(v)
		}
	}
	w.Parser.EndElement(nil, item.XMLName.Local, item)
}
